ZGlmZiAtLWdpdCBhL2JvYXJkL3NjNTIwX2NkcC9zYzUyMF9jZHAuYyBiL2JvYXJkL3NjNTIwX2NkcC9zYzUyMF9jZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzgxOGQyCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvc2M1MjBfY2RwL3NjNTIwX2NkcC5jCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiA8ZGFuaWVsQG9taWNyb24uc2U+LgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxwY2kuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaWMvc2M1MjAuaD4KKyNpbmNsdWRlIDxhc20vaWMvYWxpNTEyeC5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIGlycV9pbml0KHZvaWQpCit7CisJCisJLyogZGlzYWJsZSBnbG9iYWwgaW50ZXJydXB0IG1vZGUgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUElDSUNSLCAweDQwKTsgCisJCisJLyogc2V0IGlycTAtNyB0byBlZGdlICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX01QSUNNT0RFLCAweDAwKTsKKwkKKwkvKiBzZXQgaXJxOS0xMiB0byBsZXZlbCwgYWxsIHRoZSBvdGhlciAoOCwgMTMtMTUpIGFyZSBlZGdlICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NMMVBJQ01PREUsIDB4MWUpOworCQorCS8qIHNldCBpcnExNi0yNCAodW51c2VkIHNsYXZlIHBpYzIpIHRvIGxldmVsICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NMMlBJQ01PREUsIDB4ZmYpOworCQorCS8qIGFjdGl2ZSBsb3cgcG9sYXJpdHkgb24gUElDIGludGVycnVwdCBwaW5zLCAKKwkgICBhY3RpdmUgaGlnaCBwb2xhcml0eSBvbiBhbGwgb3RoZXIgaXJxIHBpbnMgKi8KKwl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfSU5UUElOUE9MLCAwKTsKKworCS8qIHNldCBpcnEgbnVtYmVyIG1hcHBpbmcgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1BUTVIwTUFQLDApOyAgICAgICAgICAgIC8qIGRpc2FibGUgR1AgdGltZXIgMCBJTlQgKi8gICAgICAgCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQVE1SMU1BUCwwKTsgICAgICAgICAgICAvKiBkaXNhYmxlIEdQIHRpbWVyIDEgSU5UICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQVE1SMk1BUCwwKTsgICAgICAgICAgICAvKiBkaXNhYmxlIEdQIHRpbWVyIDIgSU5UICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1BJVDBNQVAsMHgxKTsgICAgICAgICAgICAvKiBTZXQgUElUIHRpbWVyIDAgSU5UIHRvIElSUTAgKi8gCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1BJVDFNQVAsMCk7ICAgICAgICAgICAgICAvKiBkaWFibGUgUElUIHRpbWVyIDEgSU5UICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1BJVDJNQVAsMCk7ICAgICAgICAgICAgICAvKiBkaWFibGUgUElUIHRpbWVyIDIgSU5UICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1BDSUlOVEFNQVAsMHg0KTsgICAgICAgICAvKiBTZXQgUENJIElOVCBBIHRvIElSUTkgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUENJSU5UQk1BUCwweDUpOyAgICAgICAgIC8qIFNldCBQQ0kgSU5UIEIgdG8gSVJRMTAgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUENJSU5UQ01BUCwweDYpOyAgICAgICAgIC8qIFNldCBQQ0kgSU5UIEMgdG8gSVJRMTEgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUENJSU5URE1BUCwweDcpOyAgICAgICAgIC8qIFNldCBQQ0kgSU5UIEQgdG8gSVJRMTIgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfRE1BQkNJTlRNQVAsMCk7ICAgICAgICAgIC8qIGRpc2FibGUgRE1BIElOVCAqLyAKKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1NJTUFQLDApOyAgICAgICAgICAgICAgIC8qIGRpc2FibGUgU3luY2hyb25pdXMgc2VyaWFsIElOVCAqLworCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9XRFRNQVAsMCk7ICAgICAgICAgICAgICAgLyogZGlzYWJsZSBXYXRjaGRvciBJTlQgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUlRDTUFQLDB4Myk7ICAgICAgICAgICAgIC8qIFNldCBSVEMgaW50IHRvIDggKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfV1BWTUFQLDApOyAgICAgICAgICAgICAgIC8qIGRpc2FibGUgd3JpdGUgcHJvdGVjdCBJTlQgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfSUNFTUFQLDB4Mik7ICAgICAgICAgICAgIC8qIFNldCBJQ0UgRGVidWcgU2VyaWVscG9ydCBJTlQgdG8gSVJRMSAqLworCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9GRVJSTUFQLDB4OCk7ICAgICAgICAgICAgLyogU2V0IEZQIGVycm9yIElOVCB0byBJUlExMyAqLworCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUDBJTUFQLDYpOyAgICAgICAgICAgICAgLyogU2V0IEdQSVJRMCAoSVNBIElSUTIpIHRvIElSUTkgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1AxSU1BUCwyKTsgICAgICAgICAgICAgIC8qIFNldCBHUElSUTEgKFNJTyBJUlExKSB0byBJUlExICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQMklNQVAsNyk7ICAgICAgICAgICAgICAvKiBTZXQgR1BJUlEyIChJU0EgSVJRMTIpIHRvIElSUTEyICovCisJCisJaWYgKENGR19VU0VfU0lPX1VBUlQpIHsKKwkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1VBUlQxTUFQLDApOyAgICAgLyogZGlzYWJsZSBpbnRlcm5hbCBVQVJUMSBJTlQgKi8KKwkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1VBUlQyTUFQLDApOyAgICAgLyogZGlzYWJsZSBpbnRlcm5hbCBVQVJUMiBJTlQgKi8KKwkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQM0lNQVAsMTEpOyAgICAgLyogU2V0IEdQSVJRMyAoSVNBIElSUTMpIHRvIElSUTMgKi8gCisJCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUDRJTUFQLDEyKTsgICAgIC8qIFNldCBHUElSUTQgKElTQSBJUlE0KSB0byBJUlE0ICovCisJfSBlbHNlIHsKKwkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1VBUlQxTUFQLDEyKTsgICAgLyogU2V0IGludGVybmFsIFVBUlQyIElOVCB0byBJUlE0ICovCisJCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9VQVJUMk1BUCwxMSk7ICAgIC8qIFNldCBpbnRlcm5hbCBVQVJUMiBJTlQgdG8gSVJRMyAqLworCQl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1AzSU1BUCwwKTsgICAgICAvKiBkaXNhYmxlIEdQSVJRMyAoSVNBIElSUTMpICovIAorCQl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1A0SU1BUCwwKTsgICAgICAvKiBkaXNhYmxlIEdQSVJRNCAoSVNBIElSUTQpICovCisJfQorCQorCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUDVJTUFQLDEzKTsgICAgICAgICAgICAgLyogU2V0IEdQSVJRNSAoSVNBIElSUTUpIHRvIElSUTUgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1A2SU1BUCwyMSk7ICAgICAgICAgICAgIC8qIFNldCBHUElSUTYgKElTQSBJUlE2KSB0byBJUlE2ICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQN0lNQVAsMjIpOyAgICAgICAgICAgICAvKiBTZXQgR1BJUlE3IChJU0EgSVJRNykgdG8gSVJRNyAqLworCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUDhJTUFQLDMpOyAgICAgICAgICAgICAgLyogU2V0IEdQSVJROCAoU0lPIElSUTgpIHRvIElSUTggKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1A5SU1BUCw0KTsgICAgICAgICAgICAgIC8qIFNldCBHUElSUTkgKElTQSBJUlE5KSB0byBJUlE5ICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQMTBJTUFQLDkpOyAgICAgICAgICAgICAvKiBTZXQgR1BJUlExMCAoSVNBIElSUTEwKSB0byBJUlExMCAqLyAgICAgICAgICAKKwl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUENJSE9TVE1BUCwweDExZik7ICAgICAgIC8qIE1hcCBQQ0kgaG9zdGJyaWRnZSBJTlQgdG8gTk1JICovCisJd3JpdGVfbW1jcl93b3JkKFNDNTIwX0VDQ01BUCwweDEwMCk7ICAgICAgICAgICAvKiBNYXAgU0RSQU0gRUNDIGZhaWx1cmUgSU5UIHRvIE5NSSAqLworIAorfQorCisvKiBQQ0kgc3R1ZmYgKi8KK3N0YXRpYyB2b2lkIHBjaV9zYzUyMF9jZHBfZml4dXBfaXJxKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgcGNpX2Rldl90IGRldikKK3sKKwljaGFyIHBpbjsKKwlpbnQgaXJxOworCQorCQorCXBjaV9ob3NlX3JlYWRfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCBQQ0lfSU5URVJSVVBUX1BJTiwgJnBpbik7CisJaXJxID0gcGluLTE7CisJCisJc3dpdGNoIChQQ0lfREVWKGRldikpIHsKKwljYXNlIDIwOgorCQlicmVhazsKKwljYXNlIDE5OgorCQlpcnErPTE7CisJCWJyZWFrOworCWNhc2UgMTg6CisJCWlycSs9MjsKKwkJYnJlYWs7CisJY2FzZSAxNzoKKwkJaXJxKz0zOworCQlicmVhazsKKwlkZWZhdWx0OiAKKwkJcmV0dXJuOworCX0KKwkKKwlpcnEmPTM7IC8qIHdyYXAgYXJvdW5kICovCisJaXJxKz05OyAvKiBsb3dlc3QgSVJRIGlzIDkgKi8KKwkKKwlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgaXJxKTsKKyNpZiAwCQorCXByaW50ZigiZml4dXBfaXJxOiBkZXZpY2UgJWQgcGluICVjIGlycSAlZFxuIiwgCisJICAgICAgIFBDSV9ERVYoZGV2KSwgJ0EnICsgcGluIC0xLCBpcnEpOworI2VuZGlmCit9CisgCitzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIHNjNTIwX2NkcF9ob3NlID0geworCWZpeHVwX2lycTogcGNpX3NjNTIwX2NkcF9maXh1cF9pcnEsCit9OworCit2b2lkIHBjaV9pbml0KHZvaWQpCit7CisJcGNpX3NjNTIwX2luaXQoJnNjNTIwX2NkcF9ob3NlKTsKK30KKworCitzdGF0aWMgdm9pZCBzaWxlbmNlX3VhcnQoaW50IHBvcnQpCit7CisJb3V0YigwLCBwb3J0KzEpOworfQorCit2b2lkIHNldHVwX2FsaV9zaW8oaW50IHVhcnRfcHJpbWFyeSkKK3sKKwlhbGk1MTJ4X2luaXQoKTsKKwkKKwlhbGk1MTJ4X3NldF9mZGMoQUxJX0VOQUJMRUQsIDB4M2YyLCA2LCAwKTsKKwlhbGk1MTJ4X3NldF9wcChBTElfRU5BQkxFRCwgMHgyNzgsIDcsIDMpOworCWFsaTUxMnhfc2V0X3VhcnQoQUxJX0VOQUJMRUQsIEFMSV9VQVJUMSwgdWFydF9wcmltYXJ5PzB4M2Y4OjB4M2U4LCA0KTsKKwlhbGk1MTJ4X3NldF91YXJ0KEFMSV9FTkFCTEVELCBBTElfVUFSVDIsIHVhcnRfcHJpbWFyeT8weDJmODoweDJlOCwgMyk7CisJYWxpNTEyeF9zZXRfcnRjKEFMSV9ESVNBQkxFRCwgMCwgMCk7CisJYWxpNTEyeF9zZXRfa2JjKEFMSV9FTkFCTEVELCAxLCAxMik7CisJYWxpNTEyeF9zZXRfY2lvKEFMSV9FTkFCTEVEKTsKKwkKKwkvKiBJckRhIHBpbnMgKi8KKwlhbGk1MTJ4X2Npb19mdW5jdGlvbigxMiwgMSwgMCwgMCk7CisJYWxpNTEyeF9jaW9fZnVuY3Rpb24oMTMsIDEsIDAsIDApOworCQorCS8qIFNTSSBjaGlwIHNlbGVjdCBwaW5zICovCisJYWxpNTEyeF9jaW9fZnVuY3Rpb24oMTQsIDAsIDAsIDApOyAgLyogU1NJX0NTICovCisJYWxpNTEyeF9jaW9fZnVuY3Rpb24oMTUsIDAsIDAsIDApOyAgLyogU1NJX01WICovCQkJCQkgICAgIAorCWFsaTUxMnhfY2lvX2Z1bmN0aW9uKDE2LCAwLCAxLCAwKTsgIC8qIFNTSV9TUEkjIChpbnZlcnRlZCkgKi8KKworCS8qIEJvYXJkIFJFViBwaW5zICovCisJYWxpNTEyeF9jaW9fZnVuY3Rpb24oMjAsIDAsIDAsIDEpOworCWFsaTUxMnhfY2lvX2Z1bmN0aW9uKDIxLCAwLCAwLCAxKTsKKwlhbGk1MTJ4X2Npb19mdW5jdGlvbigyMiwgMCwgMCwgMSk7CisJYWxpNTEyeF9jaW9fZnVuY3Rpb24oMjMsIDAsIDAsIDEpOyAgICAgIAorfQorCisKKy8qIHNldCB1cCB0aGUgSVNBIGJ1cyB0aW1pbmcgYW5kIHN5c3RlbSBhZGRyZXNzIG1hcHBpbmdzICovCitzdGF0aWMgdm9pZCBidXNfaW5pdCh2b2lkKQoreworCisJLyogc2V0IHVwIHRoZSBHUCBJTyBwaW5zICovCisJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1BJT1BGUzMxXzE2LCAweGY3ZmYpOyAJLyogc2V0IHRoZSBHUElPIHBpbiBmdW5jdGlvbiAzMS0xNiByZWcgKi8JCSAgIAorCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9QRlMxNV8wLCAweGZmZmYpOyAgCS8qIHNldCB0aGUgR1BJTyBwaW4gZnVuY3Rpb24gMTUtMCByZWcgKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfQ1NQRlMsIDB4ZjgpOyAgCQkvKiBzZXQgdGhlIENTIHBpbiBmdW5jdGlvbiAgcmVnICovCQorCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9DTEtTRUwsIDB4NzApOworCisJCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQQ1NSVCwgMSk7ICAgLyogc2V0IHRoZSBHUCBDUyBvZmZzZXQgKi8gICAgCQorCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUENTUFcsIDMpOyAgIC8qIHNldCB0aGUgR1AgQ1MgcHVsc2Ugd2lkdGggKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1BDU09GRiwgMSk7ICAvKiBzZXQgdGhlIEdQIENTIG9mZnNldCAqLworCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUFJEVywgMyk7ICAgIC8qIHNldCB0aGUgUkQgcHVsc2Ugd2lkdGggKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1BSRE9GRiwgMSk7ICAvKiBzZXQgdGhlIEdQIFJEIG9mZnNldCAqLworICAgICAgICB3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1BXUlcsIDMpOyAgICAvKiBzZXQgdGhlIEdQIFdSIHB1bHNlIHdpZHRoICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQV1JPRkYsIDEpOyAgLyogc2V0IHRoZSBHUCBXUiBvZmZzZXQgKi8KKworCXdyaXRlX21tY3Jfd29yZChTQzUyMF9CT09UQ1NDVEwsIDB4MTgyMyk7CQkvKiBzZXQgdXAgdGltaW5nIG9mIEJPT1RDUyAqLyAKKwl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUk9NQ1MxQ1RMLCAweDE4MjMpOwkJLyogc2V0IHVwIHRpbWluZyBvZiBST01DUzEgKi8KKwl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUk9NQ1MyQ1RMLCAweDE4MjMpOwkJLyogc2V0IHVwIHRpbWluZyBvZiBST01DUzIgKi8gCisJCisJLyogYWRqdXN0IHRoZSBtZW1vcnkgbWFwOgorCSAqIGJ5IGRlZmF1bHQgdGhlIGZpcnN0IDI1Nk1CICgweDAwMDAwMDAwIC0gMHgwZmZmZmZmZikgaXMgbWFwcGVkIHRvIFNEUkFNCisJICogYW5kIDI1Nk1CIHRvIDFHLTEyOGsgICgweDEwMDAwMDAgLSAweDM3ZmZmZmZmKSBpcyBtYXBwZWQgdG8gUENJIG1taW8KKwkgKiB3ZSBuZWVkIHRvIG1hcCAxRy0xMjhrIC0gMUcgKDB4MzgwMDAwMDAgLSAweDNmZmZmZmZmKSB0byBDUzEgKi8gCisJCisJCQorCS8qIFNSQU0gPSBHUENTMyAxMjhrIEAgZDAwMDAtZWZmZmYqLworCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIyLCAgMHg0ZTAwNDAwZCk7CQkKKwkKKwkvKiBJREUwID0gR1BDUzYgMWYwLTFmNyAqLworCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIzLCAgMHgzODA4MDFmMCk7CQkKKworCS8qIElERTEgPSBHUENTNyAzZjYgKi8KKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSNCwgIDB4M2MwMDAzZjYpOwkJCisJLyogYm9vdGNzICovCisJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjEyLCAweDhiZmZlODAwKTsJCQorCS8qIHJvbWNzMiAqLworCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIxMywgMHhjYmZmZjAwMCk7CQkKKwkvKiByb21jczEgKi8KKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMTQsIDB4YWJmZmY4MDApOwkJCisJLyogNjgwIExFRFMgKi8KKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMTUsIDB4MzAwMDA2NDApOwkJCisJCisJYXNtICgid2JpbnZkXG4iKTsgLyogRmx1c2ggY2FjaGUsIHJlcS4gYWZ0ZXIgc2V0dGluZyB0aGUgdW5jaGFjaGVkIGF0dHJpYnV0ZSBvbmEgUEFSICovCQorCisJaWYgKENGR19VU0VfU0lPX1VBUlQpIHsKKwkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0FERERFQ0NUTCwgcmVhZF9tbWNyX2J5dGUoU0M1MjBfQUREREVDQ1RMKSB8IFVBUlQyX0RJU3xVQVJUMV9ESVMpOwkKKwkJc2V0dXBfYWxpX3NpbygxKTsKKwl9IGVsc2UgeworCQl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfQUREREVDQ1RMLCByZWFkX21tY3JfYnl0ZShTQzUyMF9BRERERUNDVEwpICYgfihVQVJUMl9ESVN8VUFSVDFfRElTKSk7CQorCQlzZXR1cF9hbGlfc2lvKDApOworCQlzaWxlbmNlX3VhcnQoMHgzZTgpOworCQlzaWxlbmNlX3VhcnQoMHgyZTgpOworCX0KKworfQorCisKKworLyoKKyAqIE1pc2NlbGFuZW91cyBwbGF0Zm9ybSBkZXBlbmRlbnQgaW5pdGlhbGlzYXRpb25zCisgKi8KKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwkKKwlpbml0X3NjNTIwKCk7CQorCWJ1c19pbml0KCk7CisJaXJxX2luaXQoKTsKKwkJCisJLyogbWF4IGRyaXZlIGN1cnJlbnQgb24gU0RSQU0gKi8KKwl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfRFNDVEwsIDB4MDEwMCk7CisJCQorCS8qIGVudGVyIGRlYnVnIG1vZGUgYWZ0ZXIgbmV4dCByZXNldCAob25seSBpZiBqdW1wZXIgaXMgYWxzbyBzZXQpICovCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1JFU0NGRywgMHgwOCk7CisJCisJLyogY29uZmlndXJlIHRoZSBzb2Z0d2FyZSB0aW1lciB0byAzMy4zMzNNSHogKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1dUTVJDRkcsIDApOworCWdkLT5idXNfY2xrID0gMzMzMzMwMDA7CisJCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlpbml0X3NjNTIwX2RyYW0oKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzaG93X2Jvb3RfcHJvZ3Jlc3MoaW50IHZhbCkKK3sKKwlvdXRiKHZhbCYweGZmLCAweDgwKTsKKwlvdXRiKCh2YWwmMHhmZjAwKT4+OCwgMHg2ODApOworfQorCisKK2ludCBsYXN0X3N0YWdlX2luaXQodm9pZCkKK3sKKwlpbnQgbWlub3I7CisJaW50IG1ham9yOworCQorCW1ham9yID0gbWlub3IgPSAwOworCW1ham9yIHw9IGFsaTUxMnhfY2lvX2luKDIzKT8yOjA7CisJbWFqb3IgfD0gYWxpNTEyeF9jaW9faW4oMjIpPzE6MDsKKwltaW5vciB8PSBhbGk1MTJ4X2Npb19pbigyMSk/MjowOworCW1pbm9yIHw9IGFsaTUxMnhfY2lvX2luKDIwKT8xOjA7CisJCisJcHJpbnRmKCJBTUQgU0M1MjAgQ0RQIHJldmlzaW9uICVkLiVkXG4iLCBtYWpvciwgbWlub3IpOworfQo=